#include <AVUITAnimation.h>

namespace AVUI {

class Point3DAnimation : public TValueAnimation<Point3D>
{
public:

    Point3DAnimation();

    DECLARE_ELEMENT(Point3DAnimation, AnimationTimeline);

    DECLARE_DEPENDENCY_PROPERTY(By);
    Nullable<Point3D> get_By() { return AVUI::UnboxValue< Nullable<Point3D> >(GetValue(get_ByProperty())); }
    void set_By(const Nullable<Point3D>& value) { SetValue(get_ByProperty(), AVUI::BoxValue(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(From);
    Nullable<Point3D> get_From() { return AVUI::UnboxValue< Nullable<Point3D> >(GetValue(get_FromProperty())); }
    void set_From(const Nullable<Point3D>& value) { SetValue(get_FromProperty(), AVUI::BoxValue(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(To);
    Nullable<Point3D> get_To() { return AVUI::UnboxValue< Nullable<Point3D> >(GetValue(get_ToProperty())); }
    void set_To(const Nullable<Point3D>& value) { SetValue(get_ToProperty(), AVUI::BoxValue(value)); } 

    bool get_IsAdditive() { return AVUI::UnboxValue< bool >(GetValue(get_IsAdditiveProperty())); }
    void set_IsAdditive(bool value) { SetValue(get_IsAdditiveProperty(), AVUI::BoxValue(value)); } 

    bool get_IsCumulative() { return AVUI::UnboxValue< bool >(GetValue(get_IsCumulativeProperty())); }
    void set_IsCumulative(bool value) { SetValue(get_IsCumulativeProperty(), AVUI::BoxValue(value)); } 

private:
    static void StaticConstructor();

};

typedef TRefCountedPtr<Point3DAnimation> Point3DAnimationPtr;

}; // namespace AVUI
